#include<bits/stdc++.h>
#define fi first
#define se second
#define PII pair<int,int>
using namespace std;
const int N=1e5+5;
const int maxl=1e6;
int n,m,L,V,ans,del;
int v[N],a[N],d[N],cnt[N];
int p[maxl];
vector<int> car[N];

void solve(int x)
{
    int s,e;
    if(a[x]==0)
    {
        if(v[x]<=V)
        {
            s=0;
            e=0;
        }else
        {
            s=d[x];
            e=L;
        }
    }else if(a[x]>0)
    {
        if(v[x]>V)
        {
            s=d[x];
            e=L;
        }else
        {
            int dx=(V*V-v[x]*v[x])/(2*a[x]);
            if(v[x]*v[x]+2*a[x]*dx==V*V) dx++;
            if(dx+d[x]>L)
            {
                s=0;
                e=0;
            }else
            {
                s=dx+d[x];
                e=L;
            }
        }
    }else
    {
        if(v[x]<=V)
        {
            s=0;
            e=0;
        }else
        {
            int dx=(V*V-v[x]*v[x])/(2*a[x]);
            if(v[x]*v[x]+2*a[x]*dx<=V*V) dx--;
            s=d[x];
            e=min(d[x]+dx,L);
        }
    }
    //cout<<s<<" "<<e<<"\n";
    bool suc=false;
    for(int i=s;i<=e;i++)
    {
        if(p[i])
        {
            if(!suc)
            {
                ans++;
                suc=true;
            }

            cnt[x]++;
            car[p[i]].push_back(x);
        }
    }
}
void dfs(int now,int sum)
{
    if(sum+m-now+1<del) return;
    if(now>m)
    {
        del=max(del,sum);
        return;
    }
    if(car[now].empty())
    {
        dfs(now+1,sum+1);
        return;
    }
    bool suc=true;
    for(auto t:car[now])
    {
        if(cnt[t]==1)
        {
            suc=false;
            break;
        }
    }
    if(suc)
    {
        for(auto t:car[now]) cnt[t]--;
        dfs(now+1,sum+1);
        for(auto t:car[now]) cnt[t]++;
    }
    dfs(now+1,sum);

}


int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int T;
    cin>>T;
    while(T--)
    {
        cin>>n>>m>>L>>V;
        for(int i=1;i<=n;i++) cnt[i]=0;
        for(int i=1;i<=m;i++) car[i].clear();
        for(int i=1;i<=L;i++) p[i]=0;
        ans=0;
        del=0;

        for(int i=1;i<=n;i++) cin>>d[i]>>v[i]>>a[i];
        for(int i=1;i<=m;i++)
        {
            int x;
            cin>>x;
            p[x]=i;
        }
        for(int i=1;i<=n;i++) solve(i);
        dfs(1,0);
        cout<<ans<<" "<<del<<"\n";
    }
}
